home *** CD-ROM | disk | FTP | other *** search
/ Compendium Deluxe 2 / LSD and 17bit Compendium Deluxe - Volume II.iso / a / prog / asmsrc / tangosources.lha / vector_sources / CUBE.S
Text File  |  2008-06-03  |  5KB  |  334 lines

  1. ; VECTOR ROUTINE V1.0 (C) 1990 WILDTANG PRODUCTIONS
  2. ; X,Y,Z ANGLES IMPLEMENTED. 
  3. ; CHEERS TO KREATOR FOR THE FAST FORMULA, WHICH WITHOUT WE NO WAY COULD
  4. ; HAVE CODED THIS ROUTINE
  5.  
  6.  
  7.  
  8.             section program,code_c
  9.             opt    c-
  10.             incdir    df1:
  11.             include    gamemacros
  12.  
  13.  
  14. ; -- Local constants --
  15.  
  16. rotatedpoints    =$75000
  17.  
  18.  
  19. ; -- Killsystem and exit routine --
  20.     
  21.     bsr        copyshape
  22.     lea        custom,a5
  23.     killsys
  24.     move.l    #newcop,$dff080
  25. mouse:
  26.     cmp.b    #$ff,$dff006
  27.     bne.s    mouse
  28.     BTST    #$7,$BFE001
  29.     BNE        ASASAS
  30.     ADD.W    #1,SCALE
  31. ASASAS
  32.     add.w    #4,zrotation
  33.     and.w    #510,zrotation
  34.     add.w    #4,xrotation
  35.     and.w    #510,Xrotation
  36.     add.w    #6,Yrotation
  37.     and.w    #510,Yrotation
  38.     bsr        rotating
  39.     bsr        clearvector
  40.     save_all
  41.     bsr        drawingthi
  42.     return_all
  43.     btst    #6,$bfe001
  44.     bne.s    mouse
  45.     ressys
  46.     clr.l    d0
  47.     rts
  48.  
  49.  
  50.  
  51. ; Blit clear the vector screen
  52.  
  53. clearvector:
  54.     blitwait
  55.     Move.w    #0,BltdMod(a5)            
  56.     move.w    #%0000000100000000,BltCon0(a5)    
  57.     Move.w    #$0000,BltCon1(a5)        
  58.     Move.w    #$ffff,Bltalwm(a5)        
  59.     Move.w    #$ffff,Bltafwm(a5)        
  60.     Move.l    #$70000,Bltdpth(a5)
  61.     Move.w    #256*64+20,BltSize(a5)    
  62.     rts
  63.  
  64.  
  65. ; -- Copy vector --
  66. copyshape:
  67.     lea        points,a1
  68.     lea        rotatedpoints,a2
  69.     move.w    (a1),d2            .No of points
  70.     add.w    #1,d2
  71.     mulu    #6,d2
  72. copyloop:
  73.     move.b    (a1)+,(a2)+
  74.     dbf        d2,copyloop
  75.     rts
  76.  
  77.  
  78. rotating
  79.     lea        rotatedpoints+2,a3
  80.     lea        points,a6
  81.     move.w    (A6)+,d7
  82.     lea        sin+64,a1            base of sine
  83. rotate
  84.     move.w    0(a6),d0            x
  85.     move.w    2(a6),d1            y
  86.     cmp.w    #0,d0
  87.     blt        misx
  88.     sub.w    scale,d0
  89.     bra        misx1
  90. misx
  91.     add.w    scale,d0
  92. misx1
  93.     cmp.w    #0,d1
  94.     blt        misy
  95.     sub.w    scale,d1
  96.     bra        misy1
  97. misy
  98.     add.w    scale,d1
  99. misy1
  100.     move.w    zrotation,d6        rotation
  101.     bsr        getsincos
  102. ; X1 = X COS(B)-Y SIN(A)
  103. ; Y1 = Y COS(B)+X SIN(A)
  104.     move.w    d0,xspace
  105.     move.w    d3,d0                y in d0
  106.     move.w    4(a6),d1
  107.     cmp.w    #0,d1
  108.     blt        misz
  109.     sub.w    scale,d1
  110.     bra        misz1
  111. misz
  112.     add.w    scale,d1
  113. misz1
  114.     move.w    yrotation,d6        rotation
  115. ; Y2 = Y1 COS(B)-Z SIN(B)
  116. ; Z1 = Z  COS(B)+Y1 SIN(B)
  117.     bsr        getsincos
  118.     move.w    d0,yspace
  119.     move.w    d3,d0
  120.     move.w    xspace,d1
  121.     move.w    xrotation,d6        rotation
  122. ; Z2 = Z1 COS(C)-X1 SIN(C)
  123. ; Z1 = X1  COS(B)+Z1 SIN(C)
  124.     bsr        getsincos    
  125.     move.w    yspace,d1
  126.     add.w    #160,d0
  127.     add.w    #100,d1
  128.     move.w    d0,0(a3)            x            
  129.     move.w    d1,2(a3)            y
  130.     move.w    d3,4(a3)            z
  131.     add.l    #6,a6
  132.     add.l    #6,a3
  133.     dbf        d7,rotate
  134.     rts
  135. SCALE    DC.L    20
  136. getsincos
  137.     move.w    d0,d2                store x
  138.     move.w    d1,d3                store y
  139.     move    64(a1,d6),d4        cosine value
  140.     move    -64(a1,d6),d5        sine   value
  141.     muls    d4,d0                x cos (a)
  142.     muls    d5,d1                y sin (a)
  143.     sub.l    d1,d0                x cos (a) - y sin (a)
  144.     add.l    d0,d0                double it
  145.     swap    d0                    swap it ( divu 32768 )
  146.     muls    d5,d2                x sin (a)
  147.     muls    d4,d3                y cos (a)
  148.     add.l    d2,d3                y cos (a) + x sin (a)
  149.     add.l    d3,d3                double it
  150.     swap    d3                    swap it ( divu 32768 )
  151.     rts
  152.  
  153. drawingthi
  154.     moveq    #0,d7
  155.     move.l    #$70000,a0
  156.     move.l    #40,a1
  157.     move.l    #$ffffffff,a2
  158.     move.l    #Conects,a6
  159.     move.w    (a6)+,d7            Amount of conects
  160.     lea        rotatedpoints+2,a4
  161. drawvector
  162.     move.w    (a6)+,d5            
  163.     move.w    (a4,d5),d0
  164.     move.w    2(a4,d5),d1
  165.     move.w    (a6)+,d5
  166.     move.w    (a4,d5),d2
  167.     move.w    2(a4,d5),d3
  168.     movem.l    d0-d7/a0-a6,-(a7)
  169.     bsr        Drawline
  170.     movem.l    (a7)+,d0-d7/a0-a6
  171.     dbf        d7,drawvector
  172.     rts
  173.  
  174. ; -- Draw line routine --
  175.  
  176. ; D0 = X1
  177. ; D1 = Y1
  178. ; D2 = X2
  179. ; D3 = Y2
  180. ; A0 = BIT MAP
  181. ; A1 = BITPLANE WIDTH IN BYTES
  182. ; A2 = MASK
  183. ; D4 TO D6 WORK REGS
  184.  
  185. DrawLine
  186.     cmp.w    d0,d2
  187.     bne        outing
  188.     cmp.w    d1,d3
  189.     bne        outing
  190.     rts
  191. outing
  192.     Move.l    A1,D4
  193.     Mulu    D1,D4
  194.     Moveq    #-$10,D5
  195.     And.w    D0,D5
  196.     Lsr.w    #3,D5
  197.     Add.w    D5,D4
  198.     Add.l    A0,D4
  199.     Clr.l    D5
  200.     Sub.w    D1,D3
  201.     roxl.b    #1,D5
  202.     tst.w    d3
  203.     Bge.s    Y2gyl
  204.     neg.w    d3
  205. y2gyl
  206.     sub.w    d0,d2
  207.     roxl.b    #1,d5
  208.     tst.w    d2
  209.     bge.s    xtgxl
  210.     neg.w    d2
  211. xtgxl
  212.     move.w    d3,d1
  213.     sub.w    d2,d1
  214.     bge.s    dygdx
  215.     exg        d2,d3
  216. dygdx
  217.     roxl.b    #1,d5
  218.     move.b    OCtant_Table(pc,D5),d5
  219.     Add.w    d2,d2
  220.     Lea        Custom,a5
  221.     BlitWait
  222.     Move.w    d2,bltbmod(a5)
  223.     sub.w    d3,d2
  224.     bge.s    sighn1
  225.     or.b    #$40,d5
  226. sighn1
  227.     Move.w    d2,bltaptl(a5)
  228.     sub.w    d3,d2
  229.     move.w    d2,bltamod(A5)
  230.     move.w    #$8000,bltadat(a5)
  231.     move.w    a2,bltbdat(a5)
  232.     move.w    #$ffff,bltafwm(a5)
  233.     and.w    #$000f,d0
  234.     ror.w    #4,d0
  235.     or.w    #$0bca,d0
  236.     move.w    d0,bltcon0(a5)
  237.     move.w    d5,bltcon1(a5)
  238.     move.l    d4,bltcpth(A5)
  239.     move.l    d4,bltdpth(A5)
  240.     move.w    a1,bltcmod(a5)
  241.     move.w    a1,bltdmod(a5)
  242.     lsl.w    #6,d3
  243.     addq.w    #2,d3
  244.     move.w    d3,bltsize(A5)
  245.     rts
  246.  
  247.  
  248. ; -- Octants for line draw routine --
  249.  
  250. Octant_Table
  251.     dc.b    0*4+1
  252.     Dc.b    4*4+1
  253.     dc.b    2*4+1
  254.     dc.b    5*4+1
  255.     dc.b    1*4+1
  256.     dc.b    6*4+1
  257.     dc.b    3*4+1
  258.     dc.b    7*4+1
  259.     even
  260.  
  261.  
  262. ; -- New copper list example --
  263.  
  264. newcop:
  265.     cmove    bplcon0,$1200
  266.     cmove    bpl1mod,$0000
  267.     cmove    bpl2mod,$0000
  268.     cmove    diwstrt,$3c81
  269.     cmove    diwstop,$3cc1
  270.     cmove    ddfstrt,$0038
  271.     cmove    ddfstop,$00d0
  272.     cmove    color00,$0000
  273.     cmove    bpl1pth,$0007
  274.     cmove    bpl1ptl,$0000
  275.     end_copper
  276.         
  277.  
  278. ; -- Data and variables --
  279.  
  280. zrotation
  281.     dc.l    0
  282. xrotation
  283.     dc.l    0
  284. yrotation
  285.     dc.l    0
  286. xspace    
  287.     dc.l    0
  288. yspace    
  289.     dc.l    0
  290.  
  291. ; -- Vector shapes --
  292.  
  293. Points
  294.  
  295.     dc.w        8-1
  296. ;    x,y,z
  297.  
  298.     Dc.w    50,50,50
  299.     Dc.w    -50,50,50
  300.     Dc.w    -50,-50,50
  301.     Dc.w    50,-50,50
  302.  
  303.     Dc.w    50,50,-50
  304.     Dc.w    -50,50,-50
  305.     Dc.w    -50,-50,-50
  306.     Dc.w    50,-50,-50
  307. Conects
  308.  
  309.     dc.w        12-1            Connecting points
  310.     dc.w    0*6,1*6
  311.     dc.w    1*6,2*6
  312.     dc.w    2*6,3*6
  313.     dc.w    3*6,0*6
  314.  
  315.     dc.w    4*6,5*6
  316.     dc.w    5*6,6*6
  317.     dc.w    6*6,7*6
  318.     dc.w    7*6,4*6
  319.     
  320.     dc.w    0*6,4*6
  321.     dc.w    1*6,5*6
  322.     dc.w    2*6,6*6
  323.     dc.w    3*6,7*6
  324.     
  325. ; -- Sine table included here --
  326. sin:
  327.     rept     2
  328.     incbin        misc_sources/sin
  329.     endr
  330.     even
  331.  
  332.  
  333.  
  334.